@echo off
color 0a
mode con cols=80 lines=35
title Deepseek_r1:8b 自动部署程序
setlocal enabledelayedexpansion

:: 检查管理员权限
fltmc >nul 2>&1 || (
    echo 请以管理员身份运行此脚本！
    echo.
    echo 右键点击脚本，选择"以管理员身份运行"
    pause
    exit /b 1
)

:: 设置变量
set "deploy_dir=%~dp0Deepseek_r1_8b"
set "model_url=https://huggingface.co/deepseek-ai/deepseek-r1-8b/resolve/main/pytorch_model.bin"
set "config_url=https://huggingface.co/deepseek-ai/deepseek-r1-8b/resolve/main/config.json"
set "tokenizer_url=https://huggingface.co/deepseek-ai/deepseek-r1-8b/resolve/main/tokenizer.json"
set "requirements_url=https://huggingface.co/deepseek-ai/deepseek-r1-8b/raw/main/requirements.txt"
set "log_file=%deploy_dir%\deploy_log.txt"

:: 创建日志文件
if not exist "%deploy_dir%" mkdir "%deploy_dir%"
echo Deepseek_r1:8b 部署日志 > "%log_file%"
echo %date% %time% - 开始部署 >> "%log_file%"

:: 显示欢迎信息
cls
echo ==========================================================
echo            Deepseek_r1:8b 模型自动部署程序
echo ==========================================================
echo.
echo  此脚本将自动下载并配置 Deepseek_r1:8b 大型语言模型
echo.
echo  部署目录: %deploy_dir%
echo.
echo ==========================================================
echo.
echo 按任意键开始部署...
pause >nul

:: 检查Python环境
echo.
echo 正在检查Python环境...
python --version >nul 2>&1
if %errorlevel% neq 0 (
    echo 未找到Python环境！请先安装Python 3.8或更高版本。
    echo 下载地址: https://www.python.org/downloads/
    echo.
    echo 安装完成后请重新运行此脚本。
    echo.
    pause
    exit /b 1
)

:: 获取Python版本
for /f "tokens=*" %%a in ('python --version 2^>^&1') do set python_version=%%a
echo Python版本: %python_version%
echo %date% %time% - 检测到Python: %python_version% >> "%log_file%"

:: 检查Python版本是否符合要求
echo %python_version% | findstr /i "python 3.[8-9]" >nul
if %errorlevel% neq 0 (
    echo 警告: 建议使用Python 3.8或更高版本以获得最佳兼容性。
    echo.
    echo 按任意键继续...
    pause >nul
)

:: 创建虚拟环境
echo.
echo 正在创建虚拟环境...
python -m venv "%deploy_dir%\venv"
if %errorlevel% neq 0 (
    echo 创建虚拟环境失败！
    echo.
    pause
    exit /b 1
)
echo %date% %time% - 虚拟环境创建成功 >> "%log_file%"

:: 激活虚拟环境
call "%deploy_dir%\venv\Scripts\activate.bat"
echo %date% %time% - 已激活虚拟环境 >> "%log_file%"

:: 安装依赖
echo.
echo 正在安装必要的依赖包...
echo 这可能需要一些时间，请耐心等待...
python -m pip install --upgrade pip >> "%log_file%" 2>&1
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 >> "%log_file%" 2>&1
pip install transformers accelerate bitsandbytes >> "%log_file%" 2>&1

:: 检查GPU支持
echo.
echo 正在检查GPU支持...
python -c "import torch; print('GPU支持: ' + ('可用' if torch.cuda.is_available() else '不可用'))" >> "%log_file%" 2>&1
if %errorlevel% neq 0 (
    echo GPU支持检查失败，将使用CPU运行。
    echo.
) else (
    python -c "import torch; print('GPU设备: ' + torch.cuda.get_device_name(0) if torch.cuda.is_available() else '')"
)

:: 下载模型文件
echo.
echo 开始下载模型文件...
echo 注意: Deepseek_r1:8b 模型约为8GB，下载时间可能较长
echo.

:: 创建模型目录
if not exist "%deploy_dir%\model" mkdir "%deploy_dir%\model"

:: 使用bitsadmin下载文件
echo 正在下载模型权重文件 (pytorch_model.bin)...
bitsadmin /transfer "ModelDownload" "%model_url%" "%deploy_dir%\model\pytorch_model.bin" >> "%log_file%" 2>&1
echo %date% %time% - 模型权重文件下载完成 >> "%log_file%"

echo 正在下载配置文件 (config.json)...
bitsadmin /transfer "ConfigDownload" "%config_url%" "%deploy_dir%\model\config.json" >> "%log_file%" 2>&1
echo %date% %time% - 配置文件下载完成 >> "%log_file%"

echo 正在下载分词器文件 (tokenizer.json)...
bitsadmin /transfer "TokenizerDownload" "%tokenizer_url%" "%deploy_dir%\model\tokenizer.json" >> "%log_file%" 2>&1
echo %date% %time% - 分词器文件下载完成 >> "%log_file%"

:: 创建启动脚本
echo.
echo 创建启动脚本...
(
    echo @echo off
    echo title Deepseek_r1:8b 本地运行环境
    echo cd /d "%deploy_dir%"
    echo call venv\Scripts\activate.bat
    echo echo ==========================================================
    echo echo           Deepseek_r1:8b 本地运行环境已启动
    echo echo ==========================================================
    echo echo.
    echo echo 请使用以下命令启动模型:
    echo echo.
    echo echo python -c "from transformers import AutoModelForCausalLM, AutoTokenizer; import torch; tokenizer = AutoTokenizer.from_pretrained('"%deploy_dir%\model"'); model = AutoModelForCausalLM.from_pretrained('"%deploy_dir%\model"', torch_dtype=torch.float16, device_map='auto'); input_text = input('请输入问题: '); inputs = tokenizer(input_text, return_tensors='pt').to(model.device); outputs = model.generate(inputs, max_length=1000); print(tokenizer.decode(outputs[0], skip_special_tokens=True))"
    echo echo.
    echo pause
) > "%deploy_dir%\start_deepseek.bat"

:: 完成部署
echo.
echo ==========================================================
echo           Deepseek_r1:8b 模型部署完成！
echo ==========================================================
echo.
echo 模型已部署至: %deploy_dir%
echo.
echo 您可以通过以下方式启动模型:
echo 1. 打开部署目录
echo 2. 双击 start_deepseek.bat 文件
echo 3. 在打开的终端中输入上述Python命令
echo.
echo 部署日志保存在: %log_file%
echo.
echo ==========================================================
echo.
echo 按任意键退出...
pause >nul
exit /b 0